home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
news
/
inn1.000
/
inn1.4sec-linux-src.tar
/
inn
/
samples
/
newgroup
< prev
next >
Wrap
Text File
|
1993-03-18
|
3KB
|
157 lines
#! /bin/sh
## $Revision: 1.20 $
## Newgroup control-message handler
PROG=newgroup
## Some shells don't pass in $* unless we explicitly pass it in here.
## =()<. @<_PATH_PARSECTL>@ "$@">()=
. /news/bin/control/parsecontrol "$@"
## Valid parameters and group name?
case "$#" in
1|2)
;;
*)
${WRITELOG} ${LOGFILE} "Unparseable newgroup by ${FROM}" <${ARTICLE}
exit
;;
esac
case "$1" in
*[\ \ /:]*)
${WRITELOG} ${LOGFILE} "Unsafe newgroup by ${FROM}" <${ARTICLE}
exit
;;
esac
## Make sure article is approved.
${SED} -e '/^$/q' <${ARTICLE} >${TEMP}
grep '^Approved:' <${TEMP} >/dev/null 2>&1 || {
rm -f ${TEMP}
${WRITELOG} ${LOGFILE} "Unapproved newgroup by ${FROM}" <${ARTICLE}
exit
}
rm -f ${TEMP}
case "$2" in
[Mm]*)
set $1 m
;;
*)
set $1 y
;;
esac
## Kill the chefs; from <wesommer@athena.mit.edu>.
## That is, turn "alt.foo.bar.bar.bar" into an "x" group.
#case `echo $1 | awk -F. '{
# if (NF > 1 && $NF != "misc") {
# if (NF > 5 || $NF == $(NF - 1) || $(NF - 1) == $(NF - 2)) {
# print "bozo";
# }
# }
# }'` in
#bozo*)
# set $1 x
# ;;
#esac
## Compare group against active file.
SUFFIX=""
LINE=`grep "^$1 " <${ACTIVE} 2>/dev/null`
case "${LINE}" in
"")
## New group.
WORD=created
;;
"$1 "*" $2")
## Exact match; ignore it.
exit
;;
"$1 "*" ="*|"$1 "*" x"|"$1 "*" j")
${WRITELOG} ${LOGFILE} "Rejected special newsgroup ($1) by ${FROM}" \
<${ARTICLE}
exit
;;
*)
case "$2" in
m)
WORD="made moderated"
SUFFIX=" (Moderated)"
;;
y)
WORD="made unmoderated"
;;
esac
;;
esac
case ${ACTION} in
mail)
P1=$1
P2=$2
export FROM WORD NEWSBIN P1 P2 ARTICLE
(
echo "${FROM} requested that $1 be ${WORD}."
echo 'To do this, type the following:'
echo " ${NEWSBIN}/ctlinnd newgroup ${P1} ${P2} ${FROM}"
echo ''
echo 'The original article was:'
cat ${ARTICLE}
) | ${WRITELOG} ${LOGFILE} "newgroup $1 $2 ${FROM}"
exit
;;
logit)
${WRITELOG} ${LOGFILE} "skipping newgroup $1 $2 ${FROM} (would be ${WORD})" \
<${ARTICLE}
exit
;;
esac
## Do the work.
ctlinnd -s newgroup $1 $2 "${FROM}"
${WRITELOG} ${LOGFILE} "newgroup $1 $2 ${WORD} ${FROM}" <${ARTICLE}
## Get a description of the newsgroup; first from the article, and
## then from the newsgroups file.
DESC=`${SED} <${ARTICLE} -n -e "
:top
/^For your newsgroups file:\$/b scan
n
b top
:scan
n
/$1[ ]/ {
p
q
}
b scan"`
test -z "${DESC}" && {
DESC=`${EGREP} "^$1 " ${NEWSGROUPS} | ${SED} "s/[ ]*(Moderated)//"`
test -z "${DESC}" && DESC="$1 ?"
}
DESC="${DESC}${SUFFIX}"
## Lock so we can update newsgroups
LOCK=${LOCKS}/LOCK.newsgroups
PID=$$
TRY=0
MAXTRY=60
export LOCK MAXTRY PID LOGFILE TRY
while [ ${TRY} -lt ${MAXTRY} ]; do
shlock -p ${PID} -f ${LOCK} && break
sleep 2
TRY=`expr ${TRY} + 1`
done
## If we got the lock, update the file; otherwise, give up.
test ${TRY} -lt ${MAXTRY} || {
echo "Newgroup cannot update newsgroups. Locked by" `cat ${LOCK}` 1>&2
exit
}
${EGREP} -v "^$1[ ]" <${NEWSGROUPS} >${TEMP}
cat ${TEMP} >${NEWSGROUPS}
echo "${DESC}" >>${NEWSGROUPS}
rm ${TEMP} ${LOCK}
exit